/**
 * 通用js方法封装处理
 */
(function ($) {
    $.extend({

        // 表格封装处理
        table: {
            _option: {},
            // 初始化表格参数
            init: function(options) {
                // 默认参数
                var defaults = {
                    tableId: '',
                    id: 'dataTable', //设定容器唯一id
                    formId: 'searchForm',
                    elem: '',
                    toolbar: '',
                    url: '',
                    limit: 10, // 每页显示的条数
                    limits: [10,20,30,40,50,60,70,80,90], //每页条数的选择项
                    sortName: 'id',  // 初始排序列名称
                    sortOrder: '', // 初始排序列的排序方式  asc: 升序、desc: 降序、null: 默认排序
                    autoSort: true, //是否前端自动处理排序
                    page: true, //开启分页
                    method: 'get', //接口http请求类型，默认：get
                    contentType: '', //发送到服务端的内容编码类型。如果你要发送 json 内容，可以设置：contentType: 'application/json'
                    request: {
                        pageName: 'page' //页码的参数名称，默认：page
                        ,limitName: 'limit' //每页数据量的参数名，默认：limit
                    }, //用于对分页请求的参数：page、limit重新设定名称
                    response: {
                        statusName: 'code' //规定数据状态的字段名称，默认：code
                        , statusCode: 1 //规定成功的状态码，默认：0
                        , msgName: 'msg' //规定状态信息的字段名称，默认：msg
                        , countName: 'count' //规定数据总数的字段名称，默认：count
                        , dataName: 'data' //规定数据列表的字段名称，默认：data
                    }, //设定返回的数据格式
                    cols:[], //表头参数一览表
                    cellMinWidth: 60, //全局定义所有常规单元格的最小宽度（默认：60）
                    height: '', //设定容器高度
                    text: {
                        none: '无数据' //默认：无数据。注：该属性为 layui 2.2.5 开始新增
                    }, //自定义文本
                    defaultToolbar: ['filter', 'print', 'exports'], // 头部工具栏右侧图标
                    loading: true, //是否显示加载条（默认：true）
                    where: {}, //接口的其它参数
                    //searchParams: {}, //自定义接口的其它参数
                    done: function(res, curr, count){
                        //如果是异步请求数据方式，res即为你接口返回的信息。
                        //如果是直接赋值的方式，res即为：{data: [], count: 99} data为当前页数据、count为数据总长度
                        //console.log(res);
                        //得到当前页码
                        //console.log(curr);
                        //得到数据总量
                        //console.log(count);
                    }, //表格数据渲染完的回调
                };
                defaults.initSort = {
                    field: defaults.sortName || 'id', //排序字段，对应 cols 设定的各字段名
                    type: defaults.sortOrder || '', //排序方式  asc: 升序、desc: 降序、null: 默认排序
                }; //初始排序

                options = $.extend({}, options);
                options.initSort = $.extend({}, options.initSort);
                options.initSort.field = options.sortName || options.initSort.field || defaults.initSort.field;
                options.initSort.type = options.sortOrder || options.initSort.type || defaults.initSort.type;
                var options = $.extend({}, defaults, layuiTableSet, options);
                options.id = options.tableId || options.id;
                options.tableId = options.tableId || options.id;
                options.elem = options.elem ? options.elem : (options.id ? '#'+options.id : '');
                if(options.initSort.type && (options.page || options.autoSort === false)) {
                    options.where = $.extend({}, options.where);
                    options.where.field = options.initSort.field;
                    options.where.order = options.initSort.type;
                }
                if(options.page) {
                    options.page = $.extend({ curr: 1 }, options.page);
                }
                $.table._option = options;

                layui.use('table', function() {
                    //layuiTableSet && layui.table.set(layuiTableSet);
                    var table = layui.table,
                        $ = layui.$,
                        form = layui.form;
                    var currTableId = $.common.isNotEmpty($.table._option.id) ? $.table._option.id : 'dataTable';
                    var renderOptions = $.extend({}, $.table._option);
                    if($.common.isEmpty($.table._option.where.order)) {
                        delete renderOptions.initSort;
                    }
                    table.render(renderOptions);

                    //监听排序事件
                    //$isSort = $.table._option.page;
                    $isSort = ($.table._option.page || $.table._option.autoSort === false);
                    if($isSort) {
                        $.table.sort();
                    }
                    if($.common.isNotEmpty($.table._option.where.order)) {
                        //$.table.search();
                    }

                    //监听单元格编辑
                    table.on('edit('+ ($.table._option.id || 'dataTable') +')', function(obj) {
                        var value = obj.value, //得到修改后的值
                            field = obj.field, //当前编辑的字段名
                            data = obj.data; //所在行的所有相关数据
                        if($.common.isNotEmpty($.table._option.editTable) && "function" == typeof $.table._option.editTable) {
                            $.table._option.editTable(field, value, data);
                        }
                    });

                    //监听行单击事件
                    table.on('row('+ ($.table._option.id || 'dataTable') +')', function(obj){
                        var tr = obj.tr; //得到当前行元素对象
                        var data = obj.data; //得到当前行数据
                        //obj.del(); //删除当前行
                        //obj.update(fields) //修改当前行数据
                        if($.common.isNotEmpty($.table._option.editRow) && "function" == typeof $.table._option.editRow) {
                            $.table._option.editRow(obj);
                        }
                    });

                    //监听行双击事件
                    table.on('rowDouble('+ ($.table._option.id || 'dataTable') +')', function(obj){
                        var tr = obj.tr; //得到当前行元素对象
                        var data = obj.data; //得到当前行数据
                        //obj.del(); //删除当前行
                        //obj.update(fields) //修改当前行数据
                        if($.common.isNotEmpty($.table._option.editRowDouble) && "function" == typeof $.table._option.editRowDouble) {
                            $.table._option.editRowDouble(obj);
                        }
                    });

                    //监听头工具栏事件
                    table.on('toolbar('+ ($.table._option.id || 'dataTable') +')', function(obj){
                        //var checkStatus = table.checkStatus(obj.config.id);
                        var event = obj.event; // 对应 元素的lay-event属性
                        if($.common.isNotEmpty($.table._option.editToolbar) && "function" == typeof $.table._option.editToolbar) {
                            $.table._option.editToolbar(obj);
                        }
                    });

                    //监听工具条
                    table.on('tool('+ ($.table._option.id || 'dataTable') +')', function(obj){
                        //注：tool 是工具条事件名，test 是 table 原始容器的属性 lay-filter="对应的值"
                        var data = obj.data; //获得当前行数据
                        var event = obj.event; //获得 lay-event 对应的值（也可以是表头的 event 参数对应的值）
                        var tr = obj.tr; //获得当前行 tr 的 DOM 对象（如果有的话）
                        if($.common.isNotEmpty($.table._option.editTool) && "function" == typeof $.table._option.editTool) {
                            $.table._option.editTool(obj);
                        }
                    });

                    //监听复选框选择
                    table.on('checkbox('+ ($.table._option.id || 'dataTable') +')', function(obj){
                        var checked = obj.checked, //当前是否选中状态
                            data = obj.data, //选中行的相关数据
                            type = obj.type; //如果触发的是全选，则为：all，如果触发的是单选，则为：one
                        if($.common.isNotEmpty($.table._option.editCheckbox) && "function" == typeof $.table._option.editCheckbox) {
                            $.table._option.editCheckbox(obj);
                        }
                    });
                });
            },

            // 表单查询条件  默认为 searchForm
            _searchFormData: function(formId, data) {
                data = $.extend({}, data);
                var currFormId = $.common.isNotEmpty(formId) ? formId : ($.common.isEmpty($.table._option.formId) ? 'searchForm' : $.table._option.formId);
                // 获取所有搜索的form元素
                var search = $.common.formToJSON(currFormId);
                /*
                // 如传递data则追加进search中
                if ($.common.isNotEmpty(data)) {
                    $.each(data, function (key) {
                        search[key] = data[key];
                    });
                }
                */
                search = $.extend({}, search, data);
                return search;
            },

            _queryParams: function (formId, data) {
                var _params = {};
                var where = $.extend({}, $.table._option.where);
                if ($.common.isNotEmpty($.table._option.searchParams)) {
                    _params = $.table._option.searchParams;
                    if("function" == typeof _params) {
                        _params = $.extend({}, _params());
                    }
                } else {
                    _params = $.table._searchFormData(formId, data);
                }
                var search = $.extend({}, search, _params);
                return search;
            },

            // 搜索-默认为 searchForm
            search: function(formId, data) {
                var search = $.table._queryParams(formId, data);
                var currTableId = $.common.isNotEmpty($.table._option.id) ? $.table._option.id : 'dataTable';
                layui.use('table', function() {
                    var table = layui.table,
                        $ = layui.$,
                        form = layui.form;
                    layui.table.reload(currTableId, {
                        page: {
                            curr: 1 //重新从第 1 页开始
                        },
                        where: search,
                        done: function (res, curr, count) {
                            $.table._option.done && $.table._option.done(res, curr, count);
                        }
                    });
                });
            },

            // 设置排序
            sort: function(id) {
                var currTableId = $.common.isEmpty(id) ? ($.common.isEmpty($.table._option.id) ? 'searchForm' : $.table._option.id) : id;
                layui.use('table', function() {
                    var table = layui.table,
                        $ = layui.$,
                        form = layui.form;
                    //监听排序事件
                    layui.table.on('sort('+currTableId+')', function(obj){
                        layui.table.reload(currTableId, {
                            initSort: obj //记录初始排序，如果不设的话，将无法标记表头的排序状态。
                            ,where: { //请求参数
                                field: obj.field //排序字段，当前排序的字段名
                                ,order: obj.type //排序方式，当前排序类型：desc（降序）、asc（升序）、null（空对象，默认排序）
                            }
                        });
                    });
                });
            },

            // 刷新表格
            refresh: function(tableId) {
                var tableId = tableId || $('.layui-form[lay-id]').attr('lay-id');
                layui.use('table', function() {
                    var table = layui.table,
                        $ = layui.$,
                        form = layui.form;
                    layui.table.reload(tableId, {
                        done: function(res, curr, count){
                            if(count>0 && !layui.table.cache[tableId].length) {
                                layui.table.reload(tableId, {
                                    page: { curr: curr-1 || 1 },
                                    done: function (res, curr, count) {
                                        $.table._option.done && $.table._option.done(res, curr, count);
                                    }
                                });
                            } else {
                                $.table._option.done && $.table._option.done(res, curr, count);
                            }
                        }
                    });
                });
            },

        },

        // 表单封装处理
        form: {
            // 表单重置
            reset: function(formId) {
                var currFormId = $.common.isNotEmpty(formId) ? formId : ($.common.isEmpty($.table._option.formId) ? 'searchForm' : $.table._option.formId);
                $("#" + currFormId)[0].reset();
                //$.table.refresh();
                $.table.search(formId);
            },
        },

        layui: {
            // form表单控件
            form: function(callback) {
                layui.use(['form'], callback);
            },
            // laydate日期控件
            laydate: function(options) {
                layui.use(['laydate'], function() {
                    var laydate = layui.laydate;
                    laydate.render(options);
                });
            },
            // upload上传控件
            upload: function(options) {
                layui.use(['upload'], function() {
                    var upload = layui.upload;
                    //执行实例
                    var uploadInst = upload.render(options);
                });
            },
            // clipboard剪切板控件
            clipboard: function(callback) {
                layui.use(['clipboard'], callback);
            },
        },

        // 弹出层封装处理
        modal: {
            // 消息提示前显示图标(通常不会单独前台调用)
            icon: function (type) {
                var icon = "";
                if (type == "warning") {
                    icon = 0;
                } else if (type == "success") {
                    icon = 1;
                } else if (type == "error") {
                    icon = 2;
                } else {
                    icon = 3;
                }
                return icon;
            },
            // 消息提示(第一个参数为内容，第二个为类型，通过类型调用不同的图标效果) [warning/success/error]
            msg: function(content, type, callback) {
                if (type != undefined) {
                    layer.msg(content, {icon: $.modal.icon(type), time: 1500, anim: 5, shade: [0.3]});
                } else {
                    layer.msg(content);
                }
                if ($.common.isNotEmpty(callback)) {
                    callback();
                }
            },
            // 错误消息
            msgError: function(content) {
                $.modal.msg(content, "error");
            },
            // 成功消息
            msgSuccess: function(content) {
                $.modal.msg(content, "success");
            },
            // 警告消息
            msgWarning: function(content) {
                $.modal.msg(content, "warning");
            },
            // 弹出提示
            alert: function(content, type, callback) {
                layer.alert(content, {
                    icon: $.modal.icon(type),
                    title: "系统提示",
                    btn: ['确认'],
                    btnclass: ['btn btn-primary'],
                }, callback);
            },
            // 错误提示
            alertError: function(content, callback) {
                $.modal.alert(content, "error", callback);
            },
            // 成功提示
            alertSuccess: function(content, callback) {
                $.modal.alert(content, "success", callback);
            },
            // 警告提示
            alertWarning: function(content, callback) {
                $.modal.alert(content, "warning", callback);
            },
            // 确认窗体
            confirm: function (content, callBack) {
                layer.confirm(content, {
                    icon: 3,
                    title: "系统提示",
                    btn: ['确认', '取消']
                }, function (index) {
                    layer.close(index);
                    callBack(true);
                });
            },
            // 消息提示并刷新父窗体
            msgReload: function(msg, type) {
                layer.msg(msg, {
                        icon: $.modal.icon(type),
                        time: 500,
                        shade: [0.1, '#8F8F8F']
                    },
                    function() {
                        $.modal.reload();
                    });
            },
            // 弹出层指定宽度
            open: function (title, url, width, height, callback) {
                // 如果是移动端，就使用自适应大小弹窗
                if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
                    width = 'auto';
                    height = 'auto';
                }
                if ($.common.isEmpty(title)) {
                    title = false;
                }
                if ($.common.isEmpty(width)) {
                    width = 850;
                }
                if ($.common.isEmpty(height)) {
                    height = ($(window).height() - 50);
                }
                if ($.common.isEmpty(callback)) {
                    // 当前层索引参数（index）、当前层的DOM对象（layero）
                    callback = function(index, layero) {
                        var iframeWin = layero.find('iframe')[0];
                        iframeWin.contentWindow.submitHandler(index, layero);
                        // 获取弹出层中的form表单元素
                        //var formSubmit=layer.getChildFrame('form', index);
                        // 获取表单中的提交按钮（在我的表单里第一个button按钮就是提交按钮，使用find方法寻找即可）
                        //var submited = formSubmit.find('button')[0];
                        // 触发点击事件，会对表单进行验证，验证成功则提交表单，失败则返回错误信息
                        //submited.click();
                        //window.parent.location.reload();
                        //location.reload();
                    }
                }
                layer.open({
                    // iframe层
                    type: 2,
                    // 宽高
                    area: [width + 'px', height + 'px'],
                    // 固定
                    fix: false,
                    // 最大最小化
                    maxmin: true,
                    // 遮罩
                    shade: 0.3,
                    // 标题
                    title: title,
                    // 内容
                    content: url,
                    // 按钮
                    btn: ['确定', '关闭'],
                    // 是否点击遮罩关闭
                    shadeClose: true,
                    // 确定按钮回调方法
                    yes: function(index){
                        callback();
                        layer.close(index);
                    },
                    // 右上角关闭按钮触发的回调
                    cancel: function(index) {
                        return true;
                    },
                    success: function(layero, index) { $.modal.layerSuccessOpen(layero, index, url) }
                });
            },
            // 弹出层指定参数选项
            openOptions: function (options) {
                var _url    = $.common.isEmpty(options.url)    ? "/404.html"               : options.url;
                var _title  = $.common.isEmpty(options.title)  ? "系统窗口"                 : options.title;
                var _width  = $.common.isEmpty(options.width)  ? "800"                     : options.width;
                var _height = $.common.isEmpty(options.height) ? ($(window).height() - 50) : options.height;
                var _btn = ['<i class="fa fa-check"></i> 确认', '<i class="fa fa-close"></i> 关闭'];
                if ($.common.isEmpty(options.yes)) {
                    options.yes = function(index, layero) {
                        options.callBack(index, layero);
                    }
                }
                layer.open({
                    type: 2,
                    maxmin: true,
                    shade: 0.3,
                    title: _title,
                    fix: false,
                    area: [_width + 'px', _height + 'px'],
                    content: _url,
                    shadeClose: $.common.isEmpty(options.shadeClose) ? true : options.shadeClose,
                    skin: options.skin,
                    btn: $.common.isEmpty(options.btn) ? _btn : options.btn,
                    yes: options.yes,
                    cancel: function () {
                        return true;
                    }
                });
            },
            // 弹出层全屏
            openFull: function (title, url, width, height) {
                //如果是移动端，就使用自适应大小弹窗
                if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {
                    width = 'auto';
                    height = 'auto';
                }
                if ($.common.isEmpty(title)) {
                    title = false;
                }
                if ($.common.isEmpty(url)) {
                    url = "/404.html";
                }
                if ($.common.isEmpty(width)) {
                    width = 800;
                }
                if ($.common.isEmpty(height)) {
                    height = ($(window).height() - 50);
                }
                var index = layer.open({
                    type: 2,
                    area: [width + 'px', height + 'px'],
                    fix: false,
                    //不固定
                    maxmin: true,
                    shade: 0.3,
                    title: title,
                    content: url,
                    btn: ['确定', '关闭'],
                    // 弹层外区域关闭
                    shadeClose: true,
                    yes: function(index, layero) {
                        var iframeWin = layero.find('iframe')[0];
                        iframeWin.contentWindow.submitHandler(index, layero);
                    },
                    cancel: function(index) {
                        return true;
                    },
                    success: function(layero, index) { $.modal.layerSuccessOpen(layero, index, url) }
                });
                layer.full(index);
            },
            openEdit: function (url, title, width, height) {
                title = title || '操作窗口';
                width = width || '850px';
                height = height || '90%';
                var index = layer.open({
                    type: 2,
                    title: title,
                    area: [width, height],
                    fix: false,
                    maxmin: true,
                    content: url,
                    success: function(layero, index) { $.modal.layerSuccessOpen(layero, index, url) }
                });
                if(!$.common.isPC()){ layer.full(index) }
            },
            layerSuccessOpen: function(layero, index, url){
                //console.log(layero, index);
                var body = layer.getChildFrame('body', index);
                //var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象，执行iframe页的方法：iframeWin.method();
                //var bodyHtml = body.html(); //得到iframe页的body内容
                //var formId = body.find('form').attr('id');
                var formObj = body.find('form').filter('[method]');
                if(formObj.length>0 && formObj.eq(0).serializeArray().length == 0) {
                    formObj.each(function () {
                        var $this = $(this);
                        if($this.attr('method') && $this.attr('method').toLowerCase() == 'post') {
                            var formData = $this.serializeArray();
                            if($this.serializeArray().length>0) {
                                formObj = body.find('form');
                                return false;
                            }
                        }
                    });
                }
                var formUrl = formObj.attr('action') || url;
                body.find('button,a.btn').each(function () {
                    var $btn = $(this);
                    var text = $btn.text().replace(/\s+/g,"").replace(/&nbsp;/g,"");
                    var clk = $btn.attr('onclick') || null;
                    var type = $btn.attr('type') || null;
                    var href = $btn.attr('href') || null;
                    type = type || ($btn.is('[lay-submit]') ? 'submit' : null);
                    var isFormElem = ($btn.closest('form').length>0 && $btn.closest('form').attr('method') && $btn.closest('form').attr('method').toLowerCase() == 'post');

                    if(text.indexOf('返回')>=0 || (clk && (clk.indexOf('history.back(')>=0 || clk.indexOf('history.go(-1)')>=0))) {
                        $btn.removeAttr('onclick');
                        $btn.click(function () {
                            layer.close(index);
                        });
                        if(isFormElem) $btn.html('取 消');
                    }
                    if($btn.attr('href') && (!isFormElem)) {
                        if($btn.attr('href')) {
                            $btn.removeAttr('onclick');
                            $btn.on('click', function (e) {
                                e.preventDefault();
                                e.stopPropagation();
                                layer.close(index);
                                if(($btn.attr('href').indexOf(':')>=0 && window.location.href != $btn.attr('href')) || ($btn.attr('href').indexOf(':')<0 && window.location.pathname != $btn.attr('href'))) {
                                    window.location.href = $btn.attr('href');
                                } else {
                                    $.table.refresh();
                                }
                            })
                        }
                    }
                    if(type == 'submit' || text.indexOf('提交')>=0 || text.indexOf('保存')>=0) {
                        // 防止跟.ajax-post绑定的点击事件函数产生重复提交
                        if($btn.is('.ajax-post')) {
                            $btn.removeClass('ajax-post');
                        }
                        $btn.off('click').on('click', function (e) {
                            e.preventDefault();
                            e.stopPropagation();
                            formObj.submit(function() { return false; });
                            var data = $.common.formToJSON(formObj);
                            //console.log(data);
                            $.operate.submit(formUrl, "post", "json", data, function (result) {
                                if (result.code == 1) {
                                    layer.close(index);
                                    //document.location.reload();
                                } else {
                                    $.modal.alertError(result.msg);
                                }
                            });
                        })
                    }
                });
            },
            // 重新加载
            reload: function () {
                parent.location.reload();
            },
            // 关闭窗体
            close: function () {
                var index = parent.layer.getFrameIndex(window.name);
                parent.layer.close(index);
            },
        },

        // 操作封装处理
        operate: {
            // 设置操作类型
            type: 1, // type:1 弹出窗口编辑， type:0 跳转到打开页面

            // 修改信息
            edit: function(id, width, height) {
                // 当前窗口打开要修改的地址
                var url = $.operate.editUrl(id);
                if(this.type == 1) {
                    $.modal.openEdit(url, '', width, height);
                } else {
                    $.common.jump(url); // 跳转到操作地址
                }
            },

            // 修改访问的地址
            editUrl: function(id) {
                var url = "";
                if ($.common.isNotEmpty(id)) {
                    url = $.table._option.editUrl.replace("__id__", id);
                } else {
                    var id = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
                    if (id.length == 0) {
                        $.modal.alertWarning("请至少选择一条记录");
                        return;
                    }
                    url = $.table._option.editUrl.replace("__id__", id);
                }
                return url;
            },

            // 添加信息
            add: function(id, width, height) {
                // 当前窗口打开要添加的地址
                var url = $.operate.addUrl(id);
                if(this.type == 1) {
                    $.modal.openEdit(url, '', width, height);
                } else {
                    $.common.jump(url); // 跳转到操作地址
                }
            },

            // 添加访问的地址
            addUrl: function(id) {
                var url = $.common.isEmpty(id) ? $.table._option.addUrl.replace("__id__", "") : $.table._option.addUrl.replace("__id__", id);
                return url;
            },

            // 删除信息
            remove: function(id) {
                $.modal.confirm("确定删除该条数据吗？", function() {
                    var url = $.common.isEmpty(id) ? $.table._option.delUrl : $.table._option.delUrl.replace("__id__", id);
                    var data = { "id": id };
                    $.operate.submit(url, "post", "json", data);
                });
            },

            // 批量删除信息
            removeAll: function() {
                var rows = $.common.isEmpty($.table._option.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns($.table._option.uniqueId);
                if (rows.length == 0) {
                    $.modal.alertWarning("请至少选择一条记录");
                    return;
                }
                $.modal.confirm("确认要删除选中的" + rows.length + "条数据吗?", function() {
                    var url = $.table._option.delUrl.replace("__id__", rows.join());
                    var data = { "id": rows.join() };
                    $.operate.submit(url, "post", "json", data);
                });
            },

            // 修改状态
            state: function(id, url) {
                $.modal.confirm("确认要更改状态吗?", function () {
                    var data = {"id": id};
                    $.operate.submit(url, "post", "json", data);
                });
            },

            // 操作
            ajaxDo: function(id, url, comfirm, callback) {
                if(comfirm === false) {
                    var data = {"id": id};
                    $.operate.submit(url, "post", "json", data, callback);
                } else {
                    comfirm = comfirm || '确认要进行此操作?';
                    comfirm = (comfirm == true || comfirm == 1) ? '确认要进行此操作?' : comfirm;
                    $.modal.confirm(comfirm, function () {
                        var data = {"id": id};
                        $.operate.submit(url, "post", "json", data, callback);
                    });
                }
            },

            // 提交数据
            submit: function(url, type, dataType, data, callback) {
                var config = {
                    url: url,
                    type: type,
                    dataType: dataType,
                    data: data,
                    beforeSend: function () {
                        // "正在处理中，请稍后..."
                    },
                    success: function(result) {
                        if (typeof callback == "function") {
                            callback(result);
                        }
                        $.operate.ajaxSuccess(result);
                    },
                    error: function (xhr, textStatus, thrownError){
                        if(xhr.status!=200 && xhr.status!=301 && xhr.status!=302) {
                            var errMsg = xhr.responseJSON && xhr.responseJSON.message ? xhr.responseJSON.message : '操作失败'
                            layer.msg(errMsg);
                        }
                    }
                };
                $.ajax(config)
            },

            // 保存信息 刷新表格
            save: function(url, data, callback) {
                var config = {
                    url: url,
                    type: "post",
                    dataType: "json",
                    data: data,
                    success: function(result) {
                        if (typeof callback == "function") {
                            callback(result);
                        }
                        $.operate.successCallback(result);
                    },
                    error: function (xhr, textStatus, thrownError){
                        if(xhr.status!=200 && xhr.status!=301 && xhr.status!=302) {
                            var errMsg = xhr.responseJSON && xhr.responseJSON.message ? xhr.responseJSON.message : '操作失败'
                            layer.msg(errMsg);
                        }
                    }
                };
                $.ajax(config)
            },

            // 成功回调执行事件（父窗体静默更新）
            successCallback: function(result) {
                if (result.code == 1) {
                    var parent = window.parent;
                    $.modal.close();
                    parent.$.modal.msgSuccess(result.msg);
                    parent.$.table.refresh();
                } else {
                    $.modal.alertError(result.msg);
                }
            },

            // 保存结果弹出msg刷新table表格
            ajaxSuccess: function (result) {
                if (result.error == 0 || result.code == 1) {
                    $.modal.msgSuccess(result.msg);
                    $.table.refresh();
                } else {
                    $.modal.alertError(result.msg);
                }
            },
        },

        // 通用方法封装处理
        common: {
            // 判断字符串是否为空
            isEmpty: function (value) {
                if (value == null || (Object.prototype.toString.call(value) === '[object Object]' && $.isEmptyObject(value)) || this.trim(value) == "") {
                    return true;
                }
                return false;
            },
            // 判断一个字符串是否为非空串
            isNotEmpty: function (value) {
                return !$.common.isEmpty(value);
            },
            // 空格截取
            trim: function (value) {
                if (value == null) {
                    return "";
                }
                return value.toString().replace(/(^\s*)|(\s*$)|\r|\n/g, "");
            },
            // 比较两个字符串（大小写敏感）
            equals: function (str, that) {
                return str == that;
            },
            // 比较两个字符串（大小写不敏感）
            equalsIgnoreCase: function (str, that) {
                return String(str).toUpperCase() === String(that).toUpperCase();
            },
            // 将字符串按指定字符分割
            split: function (str, sep, maxLen) {
                if ($.common.isEmpty(str)) {
                    return null;
                }
                var value = String(str).split(sep);
                return maxLen ? value.slice(0, maxLen - 1) : value;
            },
            // 字符串格式化(%s )
            sprintf: function (str) {
                var args = arguments, flag = true, i = 1;
                str = str.replace(/%s/g, function () {
                    var arg = args[i++];
                    if (typeof arg === 'undefined') {
                        flag = false;
                        return '';
                    }
                    return arg;
                });
                return flag ? str : '';
            },
            // 数组去重
            uniqueFn: function(array) {
                var result = [];
                var hashObj = {};
                for (var i = 0; i < array.length; i++) {
                    if (!hashObj[array[i]]) {
                        hashObj[array[i]] = true;
                        result.push(array[i]);
                    }
                }
                return result;
            },
            // 获取form下所有的字段并转换为json对象
            formToJSON: function(formId) {
                var json = {};
                var isObj = (Object.prototype.toString.call(formId) === '[object Object]');
                var obj = isObj ? $(formId) : $("#" + formId);
                $.each(obj.serializeArray(), function(i, field) {
                    if(field.name.indexOf('[]')>0) {
                        var arr = json[field.name] || [];
                        arr.push(field.value);
                        json[field.name] = arr;
                    } else {
                        json[field.name] = field.value;
                    }
                });
                return json;
            },
            // pjax跳转页
            jump: function (url) {
                $.pjax({url: url, container: '.content-wrapper'})
                //window.location.href = url;
            },
            // 判断是否PC端
            isPC: function() {
                var userAgentInfo = navigator.userAgent;
                var Agents = ["Android", "iPhone",
                    "SymbianOS", "Windows Phone",
                    "iPad", "iPod"];
                var flag = true;
                for (var v = 0; v < Agents.length; v++) {
                    if (userAgentInfo.indexOf(Agents[v]) > 0) {
                        flag = false;
                        break;
                    }
                }
                return flag;
            },
            // 加载js文件
            loadScript: function(url, callback, cache) {
                this._loadedScripts = this._loadedScripts || [];
                var _that = this;
                cache = typeof(cache) == "undefined" ? false : cache;
                if(cache && $.inArray(url, this._loadedScripts)>=0) {
                    try { (typeof(callback) != "undefined") && callback(); } catch (e) {}
                } else {
                    if($.inArray(url, this._loadedScripts)<0 || !cache) {
                        var script = document.createElement("script");
                        script.type = "text/javascript";
                        script.src = url;
                        if (script.readyState) {
                            script.onreadystatechange = function() {
                                if (script.readyState == "loaded" || script.readyState == "complete") {
                                    script.onreadystatechange = null;
                                    try { (typeof(callback) != "undefined") && callback(); } catch (e) {}
                                }
                            };
                        } else {
                            script.onload = function() {
                                try { (typeof(callback) != "undefined") && callback(); } catch (e) {}
                            };
                        }
                        document.body.appendChild(script);
                        _that._loadedScripts.push(url);
                    }
                }
            },
            // 按顺序加载多个js文件
            loadScriptSort: function(urls, callback, cache) {
                if(Object.prototype.toString.call(urls) != '[object Array]') {
                    urls = new Array(urls);
                }
                if(urls.length<=0) return;
                if(urls.length == 1) {
                    var s_script = "$.common.loadScript(urls[0], function () { callback && callback(); }, cache);";
                } else {
                    var s_template_x = "$.common.loadScript(urls[XXX], function () { ";
                    var s_template_y = " }, cache);";
                    var s_callback_x = " callback && callback(); ";

                    var count = urls.length;
                    var s_script_a = s_template_x.replace('XXX', 0);
                    var s_script_b = '';
                    var s_script_c = '';

                    for(var i=1; i<count; i++) {
                        var s_callback = i==count-1 ? s_callback_x : '';
                        s_script_b += s_template_x.replace('XXX', i) + s_callback;
                        s_script_c += s_template_y;
                    }
                    s_script = s_script_a + s_script_b + s_script_c + s_template_y;
                }
                try{
                    eval(s_script);
                }catch (err){
                    //console.log(s_script);
                }finally {
                    //console.log(s_script);
                }
            },
            // 按顺序加载多个样式文件
            loadStyles: function (urls, callback) {
                if(Object.prototype.toString.call(urls) != '[object Array]') {
                    urls = new Array(urls);
                }
                if(urls.length<=0) return;
                var head = document.getElementsByTagName('head')[0], style = document.createElement('style');
                style.innerHTML = 'body{display:none}'; //动态加载文件造成样式表渲染变慢，为了防止DOM结构在样式表渲染完成前显示造成抖动，先隐藏body，样式表读完再显示
                head.insertBefore(style,head.firstChild);
                var linkScript, count = urls.length, currentIndex = 0;
                for ( var i = 0 ; i < urls.length; i++ ){
                    if(/\.css[^\.]*$/.test(urls[i])) {
                        linkScript = document.createElement("link");
                        linkScript.type = "text/" + ("css");
                        linkScript.rel = "stylesheet";
                        linkScript.href = urls[i];
                    } else {
                        linkScript = document.createElement("script");
                        linkScript.type = "text/" + ("javascript");
                        linkScript.src = urls[i];
                    }
                    head.insertBefore(linkScript, head.lastChild)
                    linkScript.onload = linkScript.onerror = function(){
                        currentIndex++;
                        if(count == currentIndex){
                            style.innerHTML = 'body{display:block}';
                            head.insertBefore(style,head.lastChild);
                            try { (typeof(callback) != "undefined") && callback(); } catch (e) {}
                        }
                    }
                }
            },
            openImg: function(value){
                var img = "<img src="+value+" style=\"max-width:500px\">";
                layer.open({
                    type: 1,
                    shade: false,
                    title: false, //不显示标题
                    area:['auto','auto'],
                    area: [img.width + 'px', img.height+'px'],
                    content: img, //捕获的元素，注意：最好该指定的元素要存放在body最外层，否则可能被其它的相对元素所影响
                    cancel: function () {}
                });
            }
        }

    });
})(jQuery);

// 搜索表单
function searchForm(formId, data) {
    $.table.search(formId, data);
}

// 重置表单
function resetForm(formId) {
    $.form.reset(formId);
}
